package com.zhang.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zhang.system.vo.ModifyRoleVO;
import com.zhang.system.vo.UserPermissionVo;
import com.zhang.system.entity.Menu;
import com.zhang.system.entity.RoleMenu;
import com.zhang.system.entity.Role;


import java.util.List;
import java.util.Map;

/**
 * <p>
 * 关联表：角色与菜单权限表 服务类
 * </p>
 *
 * @author 创世神
 * @since 2023-07-06
 */
public interface IRoleMenuService extends IService<RoleMenu> {
    /**
     * 从角色id获取菜单
     *
     * @param roleId 角色id
     * @return {@link List}<{@link RoleMenu}>
     */
    List<Menu> getMenuFromRoleId(Long roleId);

    /**
     * 从多个角色获取所有菜单
     *
     * @param roleIds 角色id
     * @return {@link List}<{@link RoleMenu}>
     */
    List<RoleMenu> getRoleMenuFromRoles(List<Long> roleIds);

    /**
     * 从角色获取菜单
     *
     * @param roles 角色
     * @return {@link Map}<{@link String}, {@link Object}>
     */
    List<Menu> getMenuFromRole(List<Role> roles);

    /**
     * 从角色得到路由信息
     *
     * @param roleIds 角色id
     * @return {@link List}<{@link Menu}>
     */
    List<Menu> getRouterInfoFromRole(List<Long> roleIds);

    List<Menu> getMenusFromRoleIds(List<Long> roleIds);

    UserPermissionVo getPermissionByUserId(long userId);

    List<String> getMenuCodeByRoleIds(List<Long> roleIds);

    /**
     * 获取一个用户的所有权限
     *
     * @param userId
     * @return {@link List}<{@link Menu}>
     */
    List<Menu> getPermissionInfoByUserId(Long userId);

    List<String> getPermissionCodeByUserId(Long userId);

    void modifyRole(ModifyRoleVO modifyRoleVO);

    ModifyRoleVO getModifyRoleVO(String roleId);
}
